#include "MainWindow.h"
#include "ui_MainWindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    socket = new QTcpSocket(this);
    //关联连接成功状态的信号connected和槽
    connect(socket,&QTcpSocket::connected,this,&MainWindow::slot_connected);
    //关联到接收消息的信号与槽
    connect(socket,&QTcpSocket::readyRead,this,&MainWindow::slot_readyRead);
}

MainWindow::~MainWindow()
{
    delete ui;
}

//连接到服务器
void MainWindow::on_pushButton_connect_clicked()
{
    //1.获取到当前的ip和端口
    QString ip = ui->lineEdit_ip->text();
    int port = ui->lineEdit_port->text().toInt();
    //2.连接到服务器
    socket->connectToHost(QHostAddress(ip),port);

}


//连接成功
void MainWindow::slot_connected()
{
    qDebug()<<"和服务器已经连接上了";
    //连接服务器的按钮变成不可点击
    ui->pushButton_connect->setEnabled(false);
    //接收到服务器发过来的文件名和文件大小的字符串
}
//接收到消息的槽函数
void MainWindow::slot_readyRead()
{
    /*服务器有可能给客户端发哪些消息：1.失败  error/open error
     *                          2.要下载的文件列表大字符串
     *                          3.要下载的文件内容（5KB）
     *
    */

    //1.读取发来的消息
    QByteArray arr = socket->readAll();
    QString downLoadFiles = QString::fromUtf8(arr);
    qDebug()<<downLoadFiles;

    if(isDownload)
    {

        //将接收到的内容写入文件
        file.write(arr);

        readSize += arr.size();
        //关联上进度条
        ui->progressBar->setValue(readSize);

        if(readSize == fileSize)//下载完成
        {
            //关闭当前文件
            file.close();
            //修改标志位
            isDownload = false;
            //提示
            QMessageBox::information(this,"","下载完成");
        }
    }

    if(downLoadFiles == "error"||downLoadFiles == "open error")
    {
        //提示 文件下载失败
        QMessageBox::information(this," ","文件打开失败");
        return;
    }

    /*"Always on line.mp3,9002968;
     * kaixinxiangqianfei.mp3,1255327;
     * qijizaixian.mp3,5642493;
     * 七里香.mp3,4788294;
     * 小跳蛙.mp3,2418856;
     * 愿与愁.mp3,3706660;"*/

    //2.将接收到的大字符串进行拆分 按照 ; 拆分
    QStringList list = downLoadFiles.split(";");
    //3.显示到列表控件上
    ui->listWidget->addItems(list);

}

void MainWindow::on_listWidget_itemClicked(QListWidgetItem *item)
{
    //1.获取到单击这一行的内容
    QString msg = item->text();
    qDebug()<<msg;//小跳蛙.mp3,2418856
    //2.按照,进行拆分
    QStringList list = msg.split(",");
    //3.文件名称和大小
    fileName = list[0];//文件名称
    fileSize = list[1].toInt();//文件的大小
    qDebug()<<fileName<<" "<<fileSize;
    //4.让下载的按钮恢复可以点击
    ui->pushButton_download->setEnabled(true);
}
//下载
void MainWindow::on_pushButton_download_clicked()
{
    //正在下载  接收 并写入
    QString path = QFileDialog::getExistingDirectory();
    file.setFileName(path+"/"+fileName);
    //打开文件
    if(!file.open(QIODevice::WriteOnly))
        return;

    //把选中的文件名称发回给服务器
    socket->write(fileName.toUtf8());
    //将进度条设置最大值为文件的长度
    ui->progressBar->setMaximum(fileSize);
    //修改标志位  代表进入下载状态
    isDownload = true;

}
